package com.totoro.tymapping.utils;

import java.text.NumberFormat;
import java.text.ParseException;

/**
 * @author Totoro
 * @version 0.1.0
 * @date 2025/8/10 - 22:35
 * @description
 **/
public class StrUtil {
    /**
     * 获取字符串中指定字符后的所有字符串
     * @param input
     * @param prefix
     * @return
     */
    public static String getPrefixAfter(String input, String prefix) {
        return input.substring(prefix.length());
    }

    /**
     * 判断字符串是否是非负数（可以是0、0.0，格式规范，不能为负数）
     * @param str 待验证的字符串
     * @return 如果是符合要求的非负数返回true，否则返回false
     */
    public static boolean isNonNegativeNumber(String str) {
        // 空字符串直接返回false
        if (str == null || str.trim().isEmpty()) {
            return false;
        }

        // 正则表达式：匹配非负数（包括0和0.0），排除不规范格式
        // 规则：
        // 1. 不能以负号开头
        // 2. 整数形式：0 或 非零开头的正整数（如0、123）
        // 3. 小数形式：整数部分+小数点+小数部分（如0.0、123.45、0.123）
        String regex = "^0$|^[1-9]\\d*$|^0\\.\\d+$|^[1-9]\\d*\\.\\d+$";

        // 先通过正则表达式验证格式
        if (!str.matches(regex)) {
            return false;
        }

        // 进一步验证数值确实是非负数（理论上正则已保证，但双重验证更稳妥）
        try {
            double number = Double.parseDouble(str);
            return number >= 0;
        } catch (NumberFormatException e) {
            return false;
        }
    }

    /**
     * 将字符串转换为Number类型（自动识别整数或小数）
     * @param str 要转换的字符串
     * @return 转换后的Number对象，失败则返回null
     */
    public static Number stringToNumber(String str) {
        if (str == null || str.trim().isEmpty()) {
            return null;
        }

        // 去除首尾空格
        String trimmed = str.trim();

        // 尝试使用NumberFormat解析（支持整数、小数）
        try {
            return NumberFormat.getInstance().parse(trimmed);
        } catch (ParseException e) {
            return null;
        }
    }
}
